﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using PruebaADONET.DataTypes;
using System.Data.OleDb;

namespace PruebaADONET.AccesoDatos {
    public class AccesoDatosOLEDBMySQLClient {
        public List<Persona> getAllPersonas() {
            List<Persona> allPersonas = new List<Persona>();

            //string connectionString = @"Data Source=leabet-pc\SQLEXPRESS;Initial Catalog=desarrollo;User Id=admin;Password=123";
            string connectionString = @"Provider=MySQLProv;Data Source=desarrollo;User Id=root;Password=123;";

            // Se provee el string de consulta con un marcador de posición de parametro (precedido por @).
            string queryString = "SELECT nombre, apellido, urlSitioPreferido, cantHijos FROM Personas "
                               + "WHERE cantHijos > ? "
                               + "ORDER BY nombre ASC;";

            // Se especifica el valor de los parámetros.
            int paramValue = 2;

            // Se Crea y se abre la conexión en un bloque using. 
            // Esto asegura que todos los recursos serán cerrados
            // y devueltos salir del código.
            using (OleDbConnection connection = new OleDbConnection(connectionString)) {
                // Se crea el comando y los objetos parámetros.
                OleDbCommand command = new OleDbCommand(queryString, connection);
                command.Parameters.AddWithValue("@cantidadHijos", paramValue);

                // Se abre la conección en un bloque try/catch. 
                // Se ejecuta la consulta, devolciendo los resultados en un DataReader.
                try {
                    connection.Open();
                    OleDbDataReader reader = command.ExecuteReader();
                    while (reader.Read()) {
                        Persona per = new Persona() {
                            Nombre = (string)reader["nombre"],
                            Apellido = (string)reader["apellido"],
                            URLSitioPreferido = (string)reader["urlSitioPreferido"]
                        };
                        allPersonas.Add(per);
                    }
                    reader.Close();
                } catch (Exception exc) {
                    throw new Exception("Error en Acceso a Datos: " + exc.Message, exc);
                }
            }

            return allPersonas;
        }
    }
}
